module FF_BIT (D, CP, CD, Q, QN);
  input D, CP, CD;
  output Q, QN;
  supply1 SD;
  udp(z, D, CP, CD, SD);
  buf #0.01 (Q, z);
  not #0.01 (QN, z);
endmodule

primitive udp(Q, D, CP, CD, SD);
  input D, CP, CD, SD;
  output Q;
  reg Q;
  table
//  D    CP   CD   SD   : q0 : Q
    *    b    ?    ?    : ?  : -;
    0    r    ?    1    : ?  : 0;
    1    r    1    ?    : ?  : 1;
    0    *    ?    1    : 0  : 0;
    1    *    1    ?    : 1  : 1;
    ?    f    ?    ?    : ?  : -;
    ?    ?    0    ?    : ?  : 0;
    ?    b    *    1    : 0  : 0;
    0    x    *    1    : 0  : 0;
    ?    ?    1    0    : ?  : 1;
    ?    b    1    *    : 1  : 1;
    0    x    1    *    : 1  : 1;
  endtable
endprimitive

